package controll;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import modell.Gestor;
import modell.Construtora;
import modell.PerfilUsuario;

@ManagedBean(name = "gestorBean")
@RequestScoped
public class GestorBean {

	private Gestor gestorSelecionado = new Gestor();
	private PerfilUsuario perfilSelecionado;
	private List<SelectItem> perfilSelect;
	private List<SelectItem> construtoraSelect;

	private List<Gestor> lista = null;
	
	private Construtora construtoraSelecionada;
	

	public String salvar() {

		try {
			gestorSelecionado.setConstrutora(construtoraSelecionada);
			gestorSelecionado.setPerfilUsuario(perfilSelecionado);
			gestorSelecionado.setDataCadastro(new Date());

			FacesMessage faces = null;
			if (gestorSelecionado.getId() != null
					&& gestorSelecionado.getId() != 0) {
				GestorRN gestorRN = new GestorRN();
				gestorRN.alterar(gestorSelecionado);
				faces = new FacesMessage("Gestor editado com sucesso!");
			} else {
				GestorRN gestorRN = new GestorRN();
				gestorRN.salvar(gestorSelecionado);
				faces = new FacesMessage("Gestor editado com sucesso!");
			}
			FacesContext contexto = FacesContext.getCurrentInstance();
			contexto.addMessage(null, faces);
			this.lista = null;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		return null;
	}

	public String excluir() {
		
		GestorRN gestorRN = new GestorRN();

		gestorRN.excluir(gestorSelecionado);
		
		this.lista = null;
		return null;
	}

	public String novo() {
		this.gestorSelecionado = new Gestor();
		return null;
	}


	public List<Gestor> getLista() {
		GestorRN gestorRN = new GestorRN();
		
		if (lista == null) {
			lista = gestorRN.listar();
		}
		return lista;
	}

	public Construtora getConstrutoraSelecionada() {
		return construtoraSelecionada;
	}

	public void setConstrutoraSelecionada(Construtora construtoraSelecionada) {
		this.construtoraSelecionada = construtoraSelecionada;
	}

	public Gestor getGestorSelecionado() {
		return gestorSelecionado;
	}

	public void setGestorSelecionado(Gestor gestorSelecionado) {
		this.gestorSelecionado = gestorSelecionado;
	}

	public PerfilUsuario getPerfilSelecionado() {
		return perfilSelecionado;
	}

	public void setPerfilSelecionado(PerfilUsuario perfilSelecionado) {
		this.perfilSelecionado = perfilSelecionado;
	}

	public List<SelectItem> getPerfilSelect() {
		if (this.perfilSelect == null) {
			perfilSelect = new ArrayList<SelectItem>();
			PerfilUsuarioRN perfilUsuarioRN = new PerfilUsuarioRN();
			List<PerfilUsuario> listaPerfil = perfilUsuarioRN.listar();
			if (listaPerfil != null && !listaPerfil.isEmpty()) {
				SelectItem item;
				for (PerfilUsuario perfilLista : listaPerfil) {
					item = new SelectItem(perfilLista, perfilLista.getTipo());
					perfilSelect.add(item);
				}
			}
		}
		return perfilSelect;
	}

	public void setPerfilSelect(List<SelectItem> perfilSelect) {
		this.perfilSelect = perfilSelect;
	}

	public List<SelectItem> getConstrutoraSelect() {
		if (this.construtoraSelect == null) {
			construtoraSelect = new ArrayList<SelectItem>();
			ConstrutoraRN construtoraRN = new ConstrutoraRN();
			List<Construtora> listaConstrutora = construtoraRN.listarAtivos(true);
			if (listaConstrutora != null && !listaConstrutora.isEmpty()) {
				SelectItem item;
				for (Construtora construtoraLista : listaConstrutora) {
					item = new SelectItem(construtoraLista, construtoraLista.getRazaoSocial());
					construtoraSelect.add(item);
				}
			}
		}
		return construtoraSelect;
	}

	public void setConstrutoraSelect(List<SelectItem> construtoraSelect) {
		this.construtoraSelect = construtoraSelect;
	}
}
